代码的完整性

# 代码的完整性

[TOC]

# 1.数值的整数次方

# 1.1题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

# 1.2解法

# 1.2.1数学公式法

function Power(base, exponent)
{
	return Math.pow(base,exponent);
}
1
2
3
4

# 1.2.2 优化求幂

时间复杂度O(logn) 1.当底数为0且指数<0时 会出现对0求倒数的情况,需进行错误处理 2.判断底数是否等于0 由于base为double型,不能直接用==判断 3.优化求幂函数 当n为偶数,a^n =(a^n/2)*(a^n/2) 当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a

		function Power(base, exponent) {
            if (base == 0 && exponent == 0) throw new Error('0的0次方无意义!');
            if (exponent == 0) return 1;

            let abs = exponent > 0 ? exponent : ~exponent + 1;
            let res = 1;
            while (abs) {
                if (abs & 1) {
                    res *= base;
                }
                base *= base;
                abs = abs >> 1;
            }
            return exponent > 0 ? res : 1 / res;
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.调整数组顺序使奇数位于偶数前面

# 2.1题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

# 2.2解法

# 2.2.1无脑法

		// 25ms 5240k
		function reOrderArray(array) {
            let len = array.length;
            if (len < 1) return array;
            for (let i = 0; i < len; i++) {
                if (!(array[i] & 1)) {
                    array.push(array.splice(i, 1));
                    i--;
                    len--;
                }
            }
            return array;
        }
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.2.2指针法

一个指针指向奇数,另一个指针指向奇数指针前面的偶数,依次与奇数交换位置。

1,2,4,5->1,2,5,4->1,5,2,4

// 14ms 5220k
function reOrderArray(array)
{
    if(array.length<1) return array;
    for(let i=0;i<array.length;i++){
        if(array[i]&1){
            let j=i-1;
            let temp=array[i];
            while(j>=0&&!(array[j]&1)){
                array[j+1]=array[j];
                j--;
            }
            array[j+1]=temp;
        }
    }
    return array;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17